import axios from 'axios'
import { ElMessage } from 'element-plus'
import { debugUtil, DEBUG_MODE } from '@/utils/debug'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    if (DEBUG_MODE) {
      debugUtil.logRequest(
        config.url, 
        config.method, 
        config.data
      )
    }
    
    // 添加token认证信息
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.token = token
    }
    
    return config
  },
  error => {
    if (DEBUG_MODE) {
      console.error('❌ Request Interceptor Error:', error)
    }
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const duration = Date.now() - response.config.metadata?.startTime || 0
    const res = response.data
    
    if (DEBUG_MODE) {
      debugUtil.logResponse(response.config.url, res, duration)
    }
    
    // 根据后端返回的数据结构处理
    if (res.code === 200) {
      return res
    } else {
      const errorMsg = res.msg || res.message || '请求失败'
      if (DEBUG_MODE) {
        console.warn('⚠️ API返回错误状态:', {
          url: response.config.url,
          code: res.code,
          message: errorMsg,
          data: res.data
        })
      }
      ElMessage.error(errorMsg)
      return Promise.reject(new Error(errorMsg))
    }
  },
  error => {
    const duration = Date.now() - error.config?.metadata?.startTime || 0
    
    if (DEBUG_MODE) {
      debugUtil.logError(error.config?.url || 'Unknown', error, duration)
      
      // 详细的错误信息
      console.group('🔍 Detailed Error Information')
      console.log('URL:', error.config?.url)
      console.log('Method:', error.config?.method?.toUpperCase())
      console.log('Status:', error.response?.status)
      console.log('Status Text:', error.response?.statusText)
      console.log('Response Data:', error.response?.data)
      console.log('Request Data:', error.config?.data)
      console.log('Headers:', error.config?.headers)
      console.groupEnd()
    }
    
    let errorMessage = '网络错误'
    
    if (error.response) {
      // 服务器返回了错误状态码
      const status = error.response.status
      switch (status) {
        case 404:
          errorMessage = '请求的资源不存在'
          break
        case 500:
          errorMessage = '服务器内部错误'
          break
        case 403:
          errorMessage = '访问被拒绝'
          break
        case 401:
          errorMessage = '未授权访问'
          break
        default:
          errorMessage = `请求失败 (${status})`
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      errorMessage = '无法连接到服务器，请检查网络连接'
    } else {
      // 其他错误
      errorMessage = error.message || '未知错误'
    }
    
    ElMessage.error(errorMessage)
    return Promise.reject(error)
  }
)

// 添加请求时间戳
request.interceptors.request.use(config => {
  config.metadata = { startTime: Date.now() }
  return config
})

export default request
